<html>
 <head>
  <meta charset="UTF-8">
 </head>
 <body>
  <h1 data-lake-id="ve3sQ" id="ve3sQ"><span data-lake-id="u0296878a" id="u0296878a">典型回答</span></h1>
  <p data-lake-id="u3e96ad55" id="u3e96ad55"><br></p>
  <p data-lake-id="u392e0a39" id="u392e0a39"><span data-lake-id="ufd51f4b0" id="ufd51f4b0">位图（BitMap），基本思想就是用一个bit来标记元素，bit是计算机中最小的单位，也就是我们常说的计算机中的0和1，这种就是用一个位来表示的。</span></p>
  <p data-lake-id="u625babed" id="u625babed"><span data-lake-id="u95f411b5" id="u95f411b5">​</span><br></p>
  <p data-lake-id="u98c99857" id="u98c99857"><span data-lake-id="ud8184d1f" id="ud8184d1f">所谓位图，其实就是一个bit数组，即每一个位置都是一个bit，其中的取值可以是0或者1</span></p>
  <p data-lake-id="u4f789dfd" id="u4f789dfd"><span data-lake-id="uebef1496" id="uebef1496">​</span><br></p>
  <p data-lake-id="u54bd179c" id="u54bd179c"><img src="https://cdn.nlark.com/yuque/0/2023/png/5378072/1684394416334-19381463-1f61-4f08-bb1c-6f904070c44d.png?x-oss-process=image%2Fwatermark%2Ctype_d3F5LW1pY3JvaGVp%2Csize_19%2Ctext_SmF2YSA4IEd1IFA%3D%2Ccolor_FFFFFF%2Cshadow_50%2Ct_80%2Cg_se%2Cx_10%2Cy_10"></p>
  <p data-lake-id="u16e61f5c" id="u16e61f5c"><span data-lake-id="uf7856de8" id="uf7856de8">像上面的这个位图，可以用来表示1，,4，6：</span></p>
  <p data-lake-id="u73779d3d" id="u73779d3d"><span data-lake-id="u568d8e73" id="u568d8e73">​</span><br></p>
  <p data-lake-id="uf585f5b2" id="uf585f5b2"><img src="https://cdn.nlark.com/yuque/0/2023/png/5378072/1684394525006-a77cfaae-23d1-46e2-85b5-e0a8aa161391.png?x-oss-process=image%2Fwatermark%2Ctype_d3F5LW1pY3JvaGVp%2Csize_20%2Ctext_SmF2YSA4IEd1IFA%3D%2Ccolor_FFFFFF%2Cshadow_50%2Ct_80%2Cg_se%2Cx_10%2Cy_10"></p>
  <p data-lake-id="uec41266a" id="uec41266a"><span data-lake-id="ub5e0e60c" id="ub5e0e60c">如果不用位图的话，我们想要记录1，4，,6 这三个整型的话，就需要用三个unsigned int，已知每个unsigned int占4个字节，那么就是3*4 = 12个字节，一个字节有8 bit，那么就是 12*8 = 96 个bit。</span></p>
  <p data-lake-id="u6ee5d4d5" id="u6ee5d4d5"><span data-lake-id="u1e659f1c" id="u1e659f1c">​</span><br></p>
  <p data-lake-id="u1c216ceb" id="u1c216ceb"><span data-lake-id="u77302947" id="u77302947">所以，</span><strong><span data-lake-id="u0a44f48a" id="u0a44f48a">位图最大的好处就是节省空间。</span></strong></p>
  <p data-lake-id="ucfe06b4c" id="ucfe06b4c"><strong><span data-lake-id="u99a6ab72" id="u99a6ab72">​</span></strong><br></p>
  <p data-lake-id="ufd09757e" id="ufd09757e"><span data-lake-id="u38fa7157" id="u38fa7157">位图有很多种用途，特别适合用在去重、排序等场景中，著名的布隆过滤器就是基于位图实现的。</span></p>
  <p data-lake-id="u35e79244" id="u35e79244"><span data-lake-id="u884224b3" id="u884224b3">​</span><br></p>
  <p data-lake-id="u9fd7ae5c" id="u9fd7ae5c"><br></p>
  <p data-lake-id="u49c36dab" id="u49c36dab"><br></p>
  <p data-lake-id="u4f352f98" id="u4f352f98"><span data-lake-id="u34ade41d" id="u34ade41d">但是位图也有着一定的限制，那就是他只能表示0和1，无法存储其他的数字。所以他只适合这种能表示true or false的场景。</span></p>
  <h1 data-lake-id="dXyhQ" id="dXyhQ"><span data-lake-id="u6c7b89b7" id="u6c7b89b7">知识扩展</span></h1>
  <h2 data-lake-id="Xli0E" id="Xli0E"><span data-lake-id="u9f91807c" id="u9f91807c">什么是BitSet</span></h2>
  <p data-lake-id="uf9c69269" id="uf9c69269"><span data-lake-id="u81780a81" id="u81780a81">​</span><br></p>
 </body>
</html>